{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Working on a Windows 10\n", "Python version 3.11.7 | packaged by Anaconda, Inc. | (main, Dec 15 2023, 18:05:47) [MSC v.1916 64 bit (AMD64)]\n", "Pandas version 2.1.4\n", "bifacial_radiance version 0+untagged.1553.g23d2640.dirty\n" ] } ], "source": [ "# This information helps with debugging and getting support :)\n", "import sys, platform\n", "import pandas as pd\n", "import bifacial_radiance as br\n", "print(\"Working on a \", platform.system(), platform.release())\n", "print(\"Python version \", sys.version)\n", "print(\"Pandas version \", pd.__version__)\n", "print(\"bifacial_radiance version \", br.__version__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2 - Single Axis Tracking Yearly Simulation\n", "\n", "Method Gencumsky has been modified to divide the yearly-cumulative sky into various skies, each one representing the cumulative irradiance for the hours at which the tracker is at a certain angle. For faster running, for a tracker that moves between 45 and -45 degrees limit angle, if only positions every 5 degrees are considered (45, 40, 35 .... -4-, -45), then only 18 skies (and 18 simulations) will be run for the whole year.\n", "\n", "![Example of the hemisphere cumulative sky](../images_wiki/Journal2Pics/tracking_cumulativesky.PNG)\n", "\n", "\n", "This procedure was presented in:\n", "\n", "Ayala Pelaez S, Deline C, Greenberg P, Stein JS, Kostuk RK. Model and validation of single-axis tracking with bifacial PV. IEEE J Photovoltaics. 2019;9(3):715–21. https://ieeexplore.ieee.org/document/8644027 and https://www.nlr.gov/docs/fy19osti/72039.pdf (pre-print, conference version)\n", "\n", "\n", "***Steps:***\n", "1. Create a folder for your simulation, and load bifacial_radiance \n", "2. Create a Radiance Object, set Albedo and Download Weather Files \n", "4. Set Tracking Angles \n", "5. Generate the Sky \n", "6. Define a Module type \n", "7. Create the scene \n", "8. Combine Ground, Sky and Scene Objects \n", "9. Analyze and get results \n", "10. Clean Results \n", " \n", "\n", "And finally: Condensed instructions " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## 1. Create a folder for your simulation, and load bifacial_radiance \n", "\n", "First let's set the folder where the simulation will be saved. By default, this is the TEMP folder in the bifacial_radiance distribution.\n", "\n", "The lines below find the location of the folder relative to this Jupyter Journal. You can alternatively point to an empty directory (it will open a load GUI Visual Interface) or specify any other directory in your computer, for example:\n", "\n", "***testfolder = r'C:\\Users\\sayala\\Documents\\RadianceScenes\\Tutorials\\Journal2'***\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Your simulation will be stored in C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_02\n" ] } ], "source": [ "import os\n", "from pathlib import Path\n", "\n", "testfolder = Path().resolve().parent.parent / 'bifacial_radiance' / 'TEMP' / 'Tutorial_02'\n", "\n", "# Another option using relative address; for some operative systems you might need '/' instead of '\\'\n", "# testfolder = os.path.abspath(r'..\\..\\bifacial_radiance\\TEMP') \n", "\n", "print (\"Your simulation will be stored in %s\" % testfolder)\n", "\n", "if not os.path.exists(testfolder):\n", " os.makedirs(testfolder)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This will load bifacial_radiance and other libraries from python that will be useful for this Jupyter Journal:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from bifacial_radiance import *\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Create a Radiance Object, Set Albedo, and Download and Load Weather File\n", "\n", "These are all repeated steps from Tutorial 1, so condensing:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "path = C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_02\n", "Loading albedo, 1 value(s), 0.250 avg\n", "1 nonzero albedo values.\n", "Getting weather file: USA_VA_Richmond.724010_TMY2.epw\n", " ... OK!\n", "8760 line in WeatherFile. Assuming this is a standard hourly WeatherFile for the year for purposes of saving Gencumulativesky temporary weather files in EPW folder.\n", "Coercing year to 2021\n", "Saving file EPWs\\metdata_temp.csv, # points: 8760\n", "Calculating Sun position for Metdata that is right-labeled with a delta of -30 mins. i.e. 12 is 11:30 sunpos\n" ] } ], "source": [ "# Create a RadianceObj 'object' named bifacial_example. no whitespace allowed\n", "demo = RadianceObj('tutorial_2', path = str(testfolder)) \n", "\n", "albedo = 0.25\n", "demo.setGround(albedo)\n", "\n", "# Pull in meteorological data using pyEPW for any global lat/lon\n", "epwfile = demo.getEPW(lat = 37.5, lon = -77.6) # This location corresponds to Richmond, VA.\n", "# Read in the weather data pulled in above. \n", "metdata = demo.readWeatherFile(weatherFile = epwfile) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# TRACKING Workflow" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Until now, all the steps looked the same from Tutorial 1. The following section follows similar steps, but the functions are specific for working with single axis tracking.\n", "\n", "## 3. Set Tracking Angles\n", "\n", "This function will read the weather file, and based on the sun position it will calculate the angle the tracker should be at for each hour. It will create metdata files for each of the tracker angles considered." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving file EPWs\\1axis_-5.0.csv, # points: 2214\n", "Saving file EPWs\\1axis_0.0.csv, # points: 57\n", "Saving file EPWs\\1axis_5.0.csv, # points: 2096\n" ] } ], "source": [ "limit_angle = 5 # tracker rotation limit angle. Setting it ridiculously small so this runs faster.\n", "angledelta = 5 # sampling between the limit angles. \n", "backtrack = True\n", "gcr = 0.33\n", "cumulativesky = True # This is important for this example!\n", "trackerdict = demo.set1axis(metdata = metdata, limit_angle = limit_angle, backtrack = backtrack, \n", " gcr = gcr, cumulativesky = cumulativesky)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Setting backtrack to True is important in this step, so the trackers correct for self-shading when following the sun at high zenith angles. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Generate the Sky\n", "\n", "This will create the skies for each sub-metdata file created by set1axis.\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "message: There were 2175 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_-5.0.rad\n", "message: There were 50 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_0.0.rad\n", "message: There were 2066 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_5.0.rad\n" ] } ], "source": [ "trackerdict = demo.genCumSky1axis()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is how one of the cumulative sky .cal files associated with each .rad file generated look like: \n", "\n", "![Example of the gencumsky1axis](../images_wiki/Journal2Pics/gencumsky1axis_example_file_structure_and_contents.PNG)\n", "\n", "\n", "Each of the values corresponds to the cumulative rradiance of one of those patches, for when the tracker is at that specific angle through the year." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Define the Module type\n", "\n", "Let's make a more interesting module in this example. Let's do 2-up configuration in portrait, with the modules rotating around a 10 centimeter round torque tube. Let's add a gap between the two modules in 2-UP of 10 centimeters, as well as gap between the torque tube and the modules of 5 centimeters. Along the row, the modules are separated only 2 centimeters for this example. The torquetube is painted Metal_Grey in this example (it's one of the materials available in Ground.rad, and it is 40% reflective).\n", "\n", "Note that starting with bifacial_radiance version 0.4.0, the module object has a new geometry generation function `addTorquetube`. The old way of passing a properly formatted dictionary as a keyword argument will still work too.\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Module Name: test-module\n", "Module test-module updated in module.json\n", "Pre-existing .rad file objects\\test-module.rad will be overwritten\n", "\n", "Module test-module updated in module.json\n", "Pre-existing .rad file objects\\test-module.rad will be overwritten\n", "\n", "\n", " : {'x': 0.984, 'y': 1.7, 'z': 0.02, 'modulematerial': 'black', 'scenex': np.float64(1.004), 'sceney': np.float64(3.5), 'scenez': np.float64(0.1), 'numpanels': 2, 'bifi': 1, 'text': '! genbox black test-module 0.984 1.7 0.02 | xform -t -0.492 -1.75 0.1 -a 2 -t 0 1.8 0\\r\\n! genrev Metal_Grey tube1 t*1.004 0.05 32 | xform -ry 90 -t -0.502 0 0', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'glassEdge': 0.01, 'offsetfromaxis': np.float64(0.1), 'xgap': 0.02, 'ygap': 0.1, 'zgap': 0.05}\n", "\n", "{'diameter': 0.1, 'tubetype': 'round', 'material': 'Metal_Grey', 'visible': True}\n" ] } ], "source": [ "x = 0.984 # meters\n", "y = 1.7 # meters\n", "moduletype = 'test-module'\n", "numpanels = 2\n", "zgap = 0.05\n", "ygap = 0.10\n", "xgap = 0.02\n", "\n", "module = demo.makeModule(name=moduletype, x=x, y=y,xgap=xgap, ygap=ygap, zgap=zgap, \n", " numpanels=numpanels)\n", "\n", "module.addTorquetube(diameter=0.1, material='Metal_Grey', tubetype='round') # New torquetube generation function\n", "print()\n", "print(module)\n", "print()\n", "print(module.torquetube)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. Make the Scene\n", "\n", "The scene Dictionary specifies the information of the scene. For tracking, different input parameters are expected in the dictionary, such as number of rows, number of modules per row, row azimuth, hub_height (distance between the axis of rotation of the modules and the ground). " ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [], "source": [ "hub_height = 2.3\n", "sceneDict = {'gcr': gcr,'hub_height':hub_height, 'nMods': 20, 'nRows': 7} \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To make the scene we have to create a Scene Object through the method makeScene1axis. This method will create a .rad file in the objects folder, with the parameters specified in sceneDict and the module created above." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Making .rad files for cumulativesky 1-axis workflow\n", "3 Radfiles created in /objects/\n" ] } ], "source": [ "trackerdict = demo.makeScene1axis(trackerdict = trackerdict, module = module, sceneDict = sceneDict) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7. Combine Ground, Sky and Scene Objects\n", "\n", "makeOct1axis joins the sky.rad file, ground.rad file, and the geometry.rad files created in makeScene." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Making 3 octfiles in root directory.\n", "Created 1axis_-5.0.oct\n", "Created 1axis_0.0.oct\n", "Created 1axis_5.0.oct\n" ] } ], "source": [ "trackerdict = demo.makeOct1axis(trackerdict = trackerdict)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 8. Analyze and get results\n", "\n", "We can choose to analyze any module in the Scene we have created. The default, if no modWanted or rowWanted is passed, is to sample the center module of the center row. \n", "\n", "For this example we will sample row 2, module 9." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Linescan in process: 1axis_-5.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_-5.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_-5.0_Scene0_Row2_Module9.csv\n", "Index: -5.0. Wm2Front: 763365.1888888888. Wm2Back: 104650.69333333334\n", "Linescan in process: 1axis_0.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_0.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_0.0_Scene0_Row2_Module9.csv\n", "Index: 0.0. Wm2Front: 1177.299. Wm2Back: 169.90955185185186\n", "Linescan in process: 1axis_5.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_5.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_5.0_Scene0_Row2_Module9.csv\n", "Index: 5.0. Wm2Front: 845254.1222222223. Wm2Back: 116724.68148148147\n" ] } ], "source": [ "modWanted = 9\n", "rowWanted = 2\n", "trackerdict = demo.analysis1axis(trackerdict, modWanted=9, rowWanted = 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at the results with more detail. The analysis1axis routine created individual result .csv files for each angle in the /results/ folder. Cumulative run results are accumulated in the `demo.results` DataFrame.\n" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
thetanamemodNumrowNumsceneNumxyzrearZmattyperearMatWm2FrontWm2BackbackRatiorearXrearYsurf_azmsurf_tilt
0-5.01axis_-5.0_Scene0920[22.62, 22.28, 21.92, 21.58, 21.23, 20.88, 20....[-1.004, -1.004, -1.004, -1.004, -1.004, -1.00...[2.303, 2.334, 2.363, 2.395, 2.424, 2.455, 2.4...[2.273, 2.305, 2.334, 2.365, 2.395, 2.426, 2.4...[a8.1.a0.test-module.6457, a8.1.a0.test-module...[a8.1.a0.test-module.2310, a8.1.a0.test-module...[756529.1, 756527.7666666667, 756537.766666666...[121085.73333333334, 115923.96666666667, 10928...[0.1600542968846526, 0.1532316084368021, 0.144...[22.61, 22.27, 21.9, 21.56, 21.22, 20.86, 20.5...[-1.004, -1.004, -1.004, -1.004, -1.004, -1.00...90.0000005.0
15.01axis_5.0_Scene0920[22.6, 22.25, 21.89, 21.55, 21.2, 20.84, 20.5,...[-1.004, -1.004, -1.004, -1.004, -1.004, -1.00...[2.547, 2.516, 2.486, 2.455, 2.426, 2.395, 2.3...[2.518, 2.486, 2.457, 2.426, 2.396, 2.365, 2.3...[a8.1.a0.test-module.6457, a8.1.a0.test-module...[a8.1.a0.test-module.2310, a8.1.a0.test-module...[844775.6999999998, 844937.6, 845123.800000000...[110607.03333333333, 109342.16666666667, 11043...[0.13093065200905127, 0.12940856997872754, 0.1...[22.6, 22.25, 21.89, 21.55, 21.2, 20.84, 20.5,...[-1.004, -1.004, -1.004, -1.004, -1.004, -1.00...90.000000-5.0
20.01axis_0.0_Scene0920[22.61, 22.27, 21.9, 21.56, 21.2, 20.86, 20.5,...[-1.004, -1.004, -1.004, -1.004, -1.004, -1.00...[2.426, 2.426, 2.426, 2.426, 2.426, 2.426, 2.4...[2.395, 2.395, 2.395, 2.395, 2.395, 2.395, 2.3...[a8.1.a0.test-module.6457, a8.1.a0.test-module...[a8.1.a0.test-module.2310, a8.1.a0.test-module...[1188.782, 1188.81, 1188.839, 1188.867, 1084.5...[167.44663333333335, 163.31986666666668, 159.6...[0.14085550797187826, 0.13738085083891946, 0.1...[22.61, 22.27, 21.9, 21.56, 21.2, 20.86, 20.5,...[-1.004, -1.004, -1.004, -1.004, -1.004, -1.00...90.0000060.0
\n", "
" ], "text/plain": [ " theta name modNum rowNum sceneNum \\\n", "0 -5.0 1axis_-5.0_Scene0 9 2 0 \n", "1 5.0 1axis_5.0_Scene0 9 2 0 \n", "2 0.0 1axis_0.0_Scene0 9 2 0 \n", "\n", " x \\\n", "0 [22.62, 22.28, 21.92, 21.58, 21.23, 20.88, 20.... \n", "1 [22.6, 22.25, 21.89, 21.55, 21.2, 20.84, 20.5,... \n", "2 [22.61, 22.27, 21.9, 21.56, 21.2, 20.86, 20.5,... \n", "\n", " y \\\n", "0 [-1.004, -1.004, -1.004, -1.004, -1.004, -1.00... \n", "1 [-1.004, -1.004, -1.004, -1.004, -1.004, -1.00... \n", "2 [-1.004, -1.004, -1.004, -1.004, -1.004, -1.00... \n", "\n", " z \\\n", "0 [2.303, 2.334, 2.363, 2.395, 2.424, 2.455, 2.4... \n", "1 [2.547, 2.516, 2.486, 2.455, 2.426, 2.395, 2.3... \n", "2 [2.426, 2.426, 2.426, 2.426, 2.426, 2.426, 2.4... \n", "\n", " rearZ \\\n", "0 [2.273, 2.305, 2.334, 2.365, 2.395, 2.426, 2.4... \n", "1 [2.518, 2.486, 2.457, 2.426, 2.396, 2.365, 2.3... \n", "2 [2.395, 2.395, 2.395, 2.395, 2.395, 2.395, 2.3... \n", "\n", " mattype \\\n", "0 [a8.1.a0.test-module.6457, a8.1.a0.test-module... \n", "1 [a8.1.a0.test-module.6457, a8.1.a0.test-module... \n", "2 [a8.1.a0.test-module.6457, a8.1.a0.test-module... \n", "\n", " rearMat \\\n", "0 [a8.1.a0.test-module.2310, a8.1.a0.test-module... \n", "1 [a8.1.a0.test-module.2310, a8.1.a0.test-module... \n", "2 [a8.1.a0.test-module.2310, a8.1.a0.test-module... \n", "\n", " Wm2Front \\\n", "0 [756529.1, 756527.7666666667, 756537.766666666... \n", "1 [844775.6999999998, 844937.6, 845123.800000000... \n", "2 [1188.782, 1188.81, 1188.839, 1188.867, 1084.5... \n", "\n", " Wm2Back \\\n", "0 [121085.73333333334, 115923.96666666667, 10928... \n", "1 [110607.03333333333, 109342.16666666667, 11043... \n", "2 [167.44663333333335, 163.31986666666668, 159.6... \n", "\n", " backRatio \\\n", "0 [0.1600542968846526, 0.1532316084368021, 0.144... \n", "1 [0.13093065200905127, 0.12940856997872754, 0.1... \n", "2 [0.14085550797187826, 0.13738085083891946, 0.1... \n", "\n", " rearX \\\n", "0 [22.61, 22.27, 21.9, 21.56, 21.22, 20.86, 20.5... \n", "1 [22.6, 22.25, 21.89, 21.55, 21.2, 20.84, 20.5,... \n", "2 [22.61, 22.27, 21.9, 21.56, 21.2, 20.86, 20.5,... \n", "\n", " rearY surf_azm surf_tilt \n", "0 [-1.004, -1.004, -1.004, -1.004, -1.004, -1.00... 90.000000 5.0 \n", "1 [-1.004, -1.004, -1.004, -1.004, -1.004, -1.00... 90.000000 -5.0 \n", "2 [-1.004, -1.004, -1.004, -1.004, -1.004, -1.00... 90.000006 0.0 " ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results = demo.results\n", "results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets take a closer look at a single result file." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xyzrearZmattyperearMatWm2FrontWm2BackBack/FrontRatiorearXrearY
022.62-1.0042.3032.273a8.1.a0.test-module.6457a8.1.a0.test-module.2310756529.100121085.7330.16022.61-1.004
122.28-1.0042.3342.305a8.1.a0.test-module.6457a8.1.a0.test-module.2310756527.767115923.9670.15322.27-1.004
221.92-1.0042.3632.334a8.1.a0.test-module.6457a8.1.a0.test-module.2310756537.767109286.9000.14421.90-1.004
321.58-1.0042.3952.365a8.1.a0.test-module.6457a8.1.a0.test-module.2310756547.133102542.1330.13621.56-1.004
421.23-1.0042.4242.395a8.1.tube1.17sky807935.60096094.0400.11921.22-1.004
520.88-1.0042.4552.426a8.1.a1.test-module.6457a8.1.a1.test-module.2310759091.53398290.0830.12920.86-1.004
620.53-1.0042.4862.457a8.1.a1.test-module.6457a8.1.a1.test-module.2310759059.93398619.0070.13020.52-1.004
720.19-1.0042.5162.486a8.1.a1.test-module.6457a8.1.a1.test-module.2310759039.50099258.5100.13120.17-1.004
819.84-1.0042.5472.518a8.1.a1.test-module.6457a8.1.a1.test-module.2310759018.367100755.8670.13319.81-1.004
\n", "
" ], "text/plain": [ " x y z rearZ mattype \\\n", "0 22.62 -1.004 2.303 2.273 a8.1.a0.test-module.6457 \n", "1 22.28 -1.004 2.334 2.305 a8.1.a0.test-module.6457 \n", "2 21.92 -1.004 2.363 2.334 a8.1.a0.test-module.6457 \n", "3 21.58 -1.004 2.395 2.365 a8.1.a0.test-module.6457 \n", "4 21.23 -1.004 2.424 2.395 a8.1.tube1.17 \n", "5 20.88 -1.004 2.455 2.426 a8.1.a1.test-module.6457 \n", "6 20.53 -1.004 2.486 2.457 a8.1.a1.test-module.6457 \n", "7 20.19 -1.004 2.516 2.486 a8.1.a1.test-module.6457 \n", "8 19.84 -1.004 2.547 2.518 a8.1.a1.test-module.6457 \n", "\n", " rearMat Wm2Front Wm2Back Back/FrontRatio rearX \\\n", "0 a8.1.a0.test-module.2310 756529.100 121085.733 0.160 22.61 \n", "1 a8.1.a0.test-module.2310 756527.767 115923.967 0.153 22.27 \n", "2 a8.1.a0.test-module.2310 756537.767 109286.900 0.144 21.90 \n", "3 a8.1.a0.test-module.2310 756547.133 102542.133 0.136 21.56 \n", "4 sky 807935.600 96094.040 0.119 21.22 \n", "5 a8.1.a1.test-module.2310 759091.533 98290.083 0.129 20.86 \n", "6 a8.1.a1.test-module.2310 759059.933 98619.007 0.130 20.52 \n", "7 a8.1.a1.test-module.2310 759039.500 99258.510 0.131 20.17 \n", "8 a8.1.a1.test-module.2310 759018.367 100755.867 0.133 19.81 \n", "\n", " rearY \n", "0 -1.004 \n", "1 -1.004 \n", "2 -1.004 \n", "3 -1.004 \n", "4 -1.004 \n", "5 -1.004 \n", "6 -1.004 \n", "7 -1.004 \n", "8 -1.004 " ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resultPath = os.path.join('results','irr_1axis_-5.0_Scene0_Row2_Module9.csv')\n", "result_neg5 = load.read1Result(resultPath)\n", "result_neg5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are various things to notice:\n", "\n", "I. The materials column has a specific format that will tell you if you are sampling the correct module:\n", "\n", " a{ModWanted}.{rowWanted}.a{numPanel}.{moduletype}.material_key\n", "\n", "* Since for this journal numPanels = 2, numPanel can either be 0 or 1, for the East-most and West-most module in the collector width.\n", "* numPanel, ModWanted and RowWanted are indexed starting at 0 in the results.\n", "* material_key is from the surface generated inside radiance. Usually it is 6457 for top surface of the module and .2310 for the bottom one. \n", "\n", "II. Sensors sample always in the same direction. For this N-S aligned tracker, that is East-most to West. For this 2-up portrait tracker which is 3.5 meters, 20x7 rows and we are sampling module 9 on row 2, the East to West sampling goes from 22.6 m to 19.81 m = 2.79m. It is not exatly 3.5 because the sensors are spaced evenly through the collector width (CW): \n", "\n", "\n", "![Sensors spaced along collector width](../images_wiki/Journal2Pics/spaced_sensors.PNG)\n", "\n", "III. When there is a ygap in the collector width (2-UP or more configuration), some of the sensors might end up sampling the torque tube, or the sky. You can see that in the materials columns. This also happens if the number of sensors is quite high, the edges of the module might be sampled instead of the sensors. For this reason, before calculating bifacial gain these results must be cleaned. For more advanced simulations, make sure you clean each result csv file individually. We provide some options on load.py but some are very use-specific, so you might have to develop your own cleaning tool (or let us know on issues!)\n", "\n", "
\n", "Important: If you have torquetubes and y-gap values, make sure you clean your results.\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 9. Clean Results\n", "\n", "We have two options for cleaning results. The simplest one is load.cleanResults, but there is also a deepClean for specific purposes.\n", "\n", "cleanResults will find materials that should not have values and set them to NaN. Note that this function only works on single result files, not the demo.results dataframe." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xyzrearZmattyperearMatWm2FrontWm2BackBack/FrontRatiorearXrearY
022.62-1.0042.3032.273a8.1.a0.test-module.6457a8.1.a0.test-module.2310756529.100121085.7330.16022.61-1.004
122.28-1.0042.3342.305a8.1.a0.test-module.6457a8.1.a0.test-module.2310756527.767115923.9670.15322.27-1.004
221.92-1.0042.3632.334a8.1.a0.test-module.6457a8.1.a0.test-module.2310756537.767109286.9000.14421.90-1.004
321.58-1.0042.3952.365a8.1.a0.test-module.6457a8.1.a0.test-module.2310756547.133102542.1330.13621.56-1.004
421.23-1.0042.4242.395a8.1.tube1.17skyNaNNaN0.11921.22-1.004
520.88-1.0042.4552.426a8.1.a1.test-module.6457a8.1.a1.test-module.2310759091.53398290.0830.12920.86-1.004
620.53-1.0042.4862.457a8.1.a1.test-module.6457a8.1.a1.test-module.2310759059.93398619.0070.13020.52-1.004
720.19-1.0042.5162.486a8.1.a1.test-module.6457a8.1.a1.test-module.2310759039.50099258.5100.13120.17-1.004
819.84-1.0042.5472.518a8.1.a1.test-module.6457a8.1.a1.test-module.2310759018.367100755.8670.13319.81-1.004
\n", "
" ], "text/plain": [ " x y z rearZ mattype \\\n", "0 22.62 -1.004 2.303 2.273 a8.1.a0.test-module.6457 \n", "1 22.28 -1.004 2.334 2.305 a8.1.a0.test-module.6457 \n", "2 21.92 -1.004 2.363 2.334 a8.1.a0.test-module.6457 \n", "3 21.58 -1.004 2.395 2.365 a8.1.a0.test-module.6457 \n", "4 21.23 -1.004 2.424 2.395 a8.1.tube1.17 \n", "5 20.88 -1.004 2.455 2.426 a8.1.a1.test-module.6457 \n", "6 20.53 -1.004 2.486 2.457 a8.1.a1.test-module.6457 \n", "7 20.19 -1.004 2.516 2.486 a8.1.a1.test-module.6457 \n", "8 19.84 -1.004 2.547 2.518 a8.1.a1.test-module.6457 \n", "\n", " rearMat Wm2Front Wm2Back Back/FrontRatio rearX \\\n", "0 a8.1.a0.test-module.2310 756529.100 121085.733 0.160 22.61 \n", "1 a8.1.a0.test-module.2310 756527.767 115923.967 0.153 22.27 \n", "2 a8.1.a0.test-module.2310 756537.767 109286.900 0.144 21.90 \n", "3 a8.1.a0.test-module.2310 756547.133 102542.133 0.136 21.56 \n", "4 sky NaN NaN 0.119 21.22 \n", "5 a8.1.a1.test-module.2310 759091.533 98290.083 0.129 20.86 \n", "6 a8.1.a1.test-module.2310 759059.933 98619.007 0.130 20.52 \n", "7 a8.1.a1.test-module.2310 759039.500 99258.510 0.131 20.17 \n", "8 a8.1.a1.test-module.2310 759018.367 100755.867 0.133 19.81 \n", "\n", " rearY \n", "0 -1.004 \n", "1 -1.004 \n", "2 -1.004 \n", "3 -1.004 \n", "4 -1.004 \n", "5 -1.004 \n", "6 -1.004 \n", "7 -1.004 \n", "8 -1.004 " ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results_clean = load.cleanResult(result_neg5)\n", "results_clean" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These are the total irradiance values over all the hours of the year that the module at each sampling point will receive. Dividing the back irradiance average by the front irradiance average will give us the bifacial gain for the year:\n", "\n", "![Bifacial Gain in Irradiance Formula](../images_wiki/Journal1Pics/BGG_Formula.PNG)\n", "\n", "Assuming that our module from Prism Solar has a bifaciality factor (rear to front performance) of 90%, our bifacial gain is of:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Annual bifacial ratio: 0.126 \n" ] } ], "source": [ "bifacialityfactor = 0.9\n", "print('Annual bifacial ratio: %0.3f ' %( np.nanmean(results_clean.Wm2Back) * bifacialityfactor / np.nanmean(results_clean.Wm2Front)) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## CONDENSED VERSION\n", "Everything we've done so far in super short condensed version:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "startdate = pd.to_datetime('2021-05-01 6:0:0') #\n", " # pd.to_datetime('2021-06-01 6:0:0'),\n", " # pd.to_datetime('2021-07-01 6:0:0'),\n", " # pd.to_datetime('2021-08-01 6:0:0'),\n", " # pd.to_datetime('2021-09-01 6:0:0'),\n", " # pd.to_datetime('2021-05-01 6:0:0')]\n", "enddate = pd.to_datetime('2021-05-31 6:0:0')# , # May\n", " # pd.to_datetime('2021-06-30 20:0:0'), # June" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "path = C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_02\n", "Loading albedo, 1 value(s), 0.250 avg\n", "1 nonzero albedo values.\n", "Getting weather file: USA_VA_Richmond.724010_TMY2.epw\n", " ... OK!\n", "8760 line in WeatherFile. Assuming this is a standard hourly WeatherFile for the year for purposes of saving Gencumulativesky temporary weather files in EPW folder.\n", "Coercing year to 2021\n", "Filtering dates\n", "Saving file EPWs\\metdata_temp.csv, # points: 8760\n", "Calculating Sun position for Metdata that is right-labeled with a delta of -30 mins. i.e. 12 is 11:30 sunpos\n", "Saving file EPWs\\1axis_-50.0.csv, # points: 68\n", "Saving file EPWs\\1axis_-45.0.csv, # points: 8\n", "Saving file EPWs\\1axis_-40.0.csv, # points: 19\n", "Saving file EPWs\\1axis_-35.0.csv, # points: 25\n", "Saving file EPWs\\1axis_-25.0.csv, # points: 30\n", "Saving file EPWs\\1axis_-15.0.csv, # points: 9\n", "Saving file EPWs\\1axis_-10.0.csv, # points: 52\n", "Saving file EPWs\\1axis_5.0.csv, # points: 30\n", "Saving file EPWs\\1axis_10.0.csv, # points: 6\n", "Saving file EPWs\\1axis_15.0.csv, # points: 14\n", "Saving file EPWs\\1axis_20.0.csv, # points: 39\n", "Saving file EPWs\\1axis_35.0.csv, # points: 30\n", "Saving file EPWs\\1axis_45.0.csv, # points: 20\n", "Saving file EPWs\\1axis_50.0.csv, # points: 70\n", "message: There were 66 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_-50.0.rad\n", "message: There were 8 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_-45.0.rad\n", "message: There were 19 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_-40.0.rad\n", "message: There were 25 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_-35.0.rad\n", "message: There were 30 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_-25.0.rad\n", "message: There were 8 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_-15.0.rad\n", "message: There were 48 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_-10.0.rad\n", "message: There were 30 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_5.0.rad\n", "message: There were 5 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_10.0.rad\n", "message: There were 13 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_15.0.rad\n", "message: There were 39 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_20.0.rad\n", "message: There were 30 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_35.0.rad\n", "message: There were 20 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_45.0.rad\n", "message: There were 70 sun up hours in this climate file\n", "Total Ibh/Lbh: 0.000000\n", "Created skyfile skies\\1axis_50.0.rad\n", "\n", "Making .rad files for cumulativesky 1-axis workflow\n", "14 Radfiles created in /objects/\n", "\n", "Making 14 octfiles in root directory.\n", "Created 1axis_-50.0.oct\n", "Created 1axis_-45.0.oct\n", "Created 1axis_-40.0.oct\n", "Created 1axis_-35.0.oct\n", "Created 1axis_-25.0.oct\n", "Created 1axis_-15.0.oct\n", "Created 1axis_-10.0.oct\n", "Created 1axis_5.0.oct\n", "Created 1axis_10.0.oct\n", "Created 1axis_15.0.oct\n", "Created 1axis_20.0.oct\n", "Created 1axis_35.0.oct\n", "Created 1axis_45.0.oct\n", "Created 1axis_50.0.oct\n", "Linescan in process: 1axis_-50.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_-50.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_-50.0_Scene0_Row2_Module9.csv\n", "Index: -50.0. Wm2Front: 30598.525185185186. Wm2Back: 7069.0363333333335\n", "Linescan in process: 1axis_-45.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_-45.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_-45.0_Scene0_Row2_Module9.csv\n", "Index: -45.0. Wm2Front: 1924.6771481481483. Wm2Back: 182.09474074074075\n", "Linescan in process: 1axis_-40.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_-40.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_-40.0_Scene0_Row2_Module9.csv\n", "Index: -40.0. Wm2Front: 10017.671888888888. Wm2Back: 1120.4236703703705\n", "Linescan in process: 1axis_-35.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_-35.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_-35.0_Scene0_Row2_Module9.csv\n", "Index: -35.0. Wm2Front: 11937.552592592592. Wm2Back: 4776.787407407407\n", "Linescan in process: 1axis_-25.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_-25.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_-25.0_Scene0_Row2_Module9.csv\n", "Index: -25.0. Wm2Front: 21090.204444444447. Wm2Back: 2789.4267777777777\n", "Linescan in process: 1axis_-15.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_-15.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_-15.0_Scene0_Row2_Module9.csv\n", "Index: -15.0. Wm2Front: 256.5185925925926. Wm2Back: 40.77242777777778\n", "Linescan in process: 1axis_-10.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_-10.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_-10.0_Scene0_Row2_Module9.csv\n", "Index: -10.0. Wm2Front: 21620.033333333333. Wm2Back: 3103.2792592592596\n", "Linescan in process: 1axis_5.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_5.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_5.0_Scene0_Row2_Module9.csv\n", "Index: 5.0. Wm2Front: 21323.01888888889. Wm2Back: 2875.540555555556\n", "Linescan in process: 1axis_10.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_10.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_10.0_Scene0_Row2_Module9.csv\n", "Index: 10.0. Wm2Front: 512.347625925926. Wm2Back: 32.35189148148148\n", "Linescan in process: 1axis_15.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_15.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_15.0_Scene0_Row2_Module9.csv\n", "Index: 15.0. Wm2Front: 908.5102333333334. Wm2Back: 80.54242111111111\n", "Linescan in process: 1axis_20.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_20.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_20.0_Scene0_Row2_Module9.csv\n", "Index: 20.0. Wm2Front: 22589.655925925927. Wm2Back: 2953.0396296296294\n", "Linescan in process: 1axis_35.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_35.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_35.0_Scene0_Row2_Module9.csv\n", "Index: 35.0. Wm2Front: 20845.17740740741. Wm2Back: 2517.33062962963\n", "Linescan in process: 1axis_45.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_45.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_45.0_Scene0_Row2_Module9.csv\n", "Index: 45.0. Wm2Front: 10461.607666666669. Wm2Back: 14251.835918518518\n", "Linescan in process: 1axis_50.0_Scene0_Row2_Module9_Front\n", "Linescan in process: 1axis_50.0_Scene0_Row2_Module9_Back\n", "Saved: results\\irr_1axis_50.0_Scene0_Row2_Module9.csv\n", "Index: 50.0. Wm2Front: 35363.36962962963. Wm2Back: 14600.103962962965\n" ] } ], "source": [ "albedo = 0.25\n", "lat = 37.5\n", "lon = -77.6\n", "nMods = 20\n", "nRows = 7\n", "hub_height = 2.3\n", "gcr = 0.33\n", "moduletype = 'test-module' # this must already exist since we are not calling makeModule in this CONDENSED example.\n", "#testfolder = r'C:\\Users\\sayala\\Documents\\RadianceScenes\\Tutorials\\Journal2'\n", "limit_angle = 50\n", "angeldelta = 5\n", "backtrack = True\n", "gcr = gcr\n", "modWanted = 9\n", "rowWanted = 2\n", "cumulativesky = True\n", "\n", "import bifacial_radiance\n", "demo = RadianceObj('test') \n", "demo.setGround(albedo)\n", "epwfile = demo.getEPW(lat, lon) \n", "metdata = demo.readWeatherFile(epwfile, starttime=startdate, endtime=enddate, coerce_year=2021)\n", "demo.set1axis(limit_angle=limit_angle, backtrack=backtrack, gcr=gcr, cumulativesky=cumulativesky)\n", "demo.genCumSky1axis()\n", "sceneDict = {'gcr': gcr,'hub_height':hub_height, 'nMods': nMods, 'nRows': nRows} # orientation deprecated on v.0.2.4.\n", "demo.makeScene1axis(module=moduletype, sceneDict=sceneDict)\n", "demo.makeOct1axis()\n", "demo.analysis1axis(modWanted=modWanted, rowWanted=rowWanted);" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "res = demo.calculatePerformance1axis()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
rowmoduleBGGGfront_meanGrear_meanPOA_effWm2Back
0299.732236210385.18713320475.182191[234479.62299000003, 233179.63291333336, 23242...[24094.435856666663, 22794.445780000002, 22040...
\n", "
" ], "text/plain": [ " row module BGG Gfront_mean Grear_mean \\\n", "0 2 9 9.732236 210385.187133 20475.182191 \n", "\n", " POA_eff \\\n", "0 [234479.62299000003, 233179.63291333336, 23242... \n", "\n", " Wm2Back \n", "0 [24094.435856666663, 22794.445780000002, 22040... " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [conda env:.conda-bifiradiance_eager]", "language": "python", "name": "conda-env-.conda-bifiradiance_eager-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.8" }, "vscode": { "interpreter": { "hash": "14c04630f1cd445b2532d35c77825134bfcafda47af70d0b9c2b5023b1f357a5" } } }, "nbformat": 4, "nbformat_minor": 4 }